数据分析工具Pandas(2):Pandas的索引操作

您所在的位置:网站首页 pandas pandas 数据分析工具Pandas(2):Pandas的索引操作

数据分析工具Pandas(2):Pandas的索引操作

2022-06-04 11:05| 来源: 网络整理| 查看: 265

数据分析工具Pandas(1):Pandas的数据结构

数据分析工具Pandas(2):Pandas的索引操作

Pandas的索引操作 索引对象Index

1. Series和DataFrame中的索引都是Index对象

 

print(type(ser_obj.index)) print(type(df_obj2.index)) print(df_obj2.index)

运行结果:

Int64Index([0, 1, 2, 3], dtype='int64')

2. 索引对象不可变,保证了数据的安全

 

# 索引对象不可变 df_obj2.index[0] = 2

运行结果:

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () 1 # 索引对象不可变 ----> 2 df_obj2.index[0] = 2 /Users/Power/anaconda/lib/python3.6/site-packages/pandas/indexes/base.py in __setitem__(self, key, value) 1402 1403 def __setitem__(self, key, value): -> 1404 raise TypeError("Index does not support mutable operations") 1405 1406 def __getitem__(self, key): TypeError: Index does not support mutable operations

常见的Index种类

Index,索引Int64Index,整数索引MultiIndex,层级索引DatetimeIndex,时间戳类型 Series索引

1. index 指定行索引名

 

ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e']) print(ser_obj.head())

运行结果:

a 0 b 1 c 2 d 3 e 4 dtype: int64

2. 行索引

ser_obj[‘label’], ser_obj[pos]

 

# 行索引 print(ser_obj['b']) print(ser_obj[2])

运行结果:

1 2

3. 切片索引

ser_obj[2:4], ser_obj[‘label1’: ’label3’]

注意,按索引名切片操作时,是包含终止索引的。

 

# 切片索引 print(ser_obj[1:3]) print(ser_obj['b':'d'])

运行结果:

b 1 c 2 dtype: int64 b 1 c 2 d 3 dtype: int64

4. 不连续索引

ser_obj[[‘label1’, ’label2’, ‘label3’]]

 

# 不连续索引 print(ser_obj[[0, 2, 4]]) print(ser_obj[['a', 'e']])

运行结果:

a 0 c 2 e 4 dtype: int64 a 0 e 4 dtype: int64

5. 布尔索引

 

# 布尔索引 ser_bool = ser_obj > 2 print(ser_bool) print(ser_obj[ser_bool]) print(ser_obj[ser_obj > 2])

运行结果:

a False b False c False d True e True dtype: bool d 3 e 4 dtype: int64 d 3 e 4 dtype: int64 DataFrame索引

1. columns 指定列索引名

 

import numpy as np df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd']) print(df_obj.head())

运行结果:

a b c d 0 -0.241678 0.621589 0.843546 -0.383105 1 -0.526918 -0.485325 1.124420 -0.653144 2 -1.074163 0.939324 -0.309822 -0.209149 3 -0.716816 1.844654 -2.123637 -1.323484 4 0.368212 -0.910324 0.064703 0.486016

 

 

2. 列索引

df_obj[[‘label’]]

 

# 列索引 print(df_obj['a']) # 返回Series类型 print(df_obj[[0]]) # 返回DataFrame类型 print(type(df_obj[[0]])) # 返回DataFrame类型

运行结果:

0 -0.241678 1 -0.526918 2 -1.074163 3 -0.716816 4 0.368212 Name: a, dtype: float64

3. 不连续索引

df_obj[[‘label1’, ‘label2’]]

 

# 不连续索引 print(df_obj[['a','c']]) print(df_obj[[1, 3]])

运行结果:

a c 0 -0.241678 0.843546 1 -0.526918 1.124420 2 -1.074163 -0.309822 3 -0.716816 -2.123637 4 0.368212 0.064703 b d 0 0.621589 -0.383105 1 -0.485325 -0.653144 2 0.939324 -0.209149 3 1.844654 -1.323484 4 -0.910324 0.486016 高级索引:标签、位置和混合

Pandas的高级索引有3种

1. loc 标签索引

DataFrame 不能直接切片,可以通过loc来做切片

loc是基于标签名的索引,也就是我们自定义的索引名

 

# 标签索引 loc # Series print(ser_obj['b':'d']) print(ser_obj.loc['b':'d']) # DataFrame print(df_obj['a']) # 第一个参数索引行,第二个参数是列 print(df_obj.loc[0:2, 'a'])

运行结果:

b 1 c 2 d 3 dtype: int64 b 1 c 2 d 3 dtype: int64 0 -0.241678 1 -0.526918 2 -1.074163 3 -0.716816 4 0.368212 Name: a, dtype: float64 0 -0.241678 1 -0.526918 2 -1.074163 Name: a, dtype: float64

2. iloc 位置索引

作用和loc一样,不过是基于索引编号来索引

 

# 整型位置索引 iloc # Series print(ser_obj[1:3]) print(ser_obj.iloc[1:3]) # DataFrame print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的区别

运行结果:

b 1 c 2 dtype: int64 b 1 c 2 dtype: int64 0 -0.241678 1 -0.526918 Name: a, dtype: float64

3. ix 标签与位置混合索引

ix是以上二者的综合,既可以使用索引编号,又可以使用自定义索引,要视情况不同来使用,

如果索引既有数字又有英文,那么这种方式是不建议使用的,容易导致定位的混乱。

示例代码:

# 混合索引 ix # Series print(ser_obj.ix[1:3]) print(ser_obj.ix['b':'c']) # DataFrame print(df_obj.loc[0:2, 'a']) print(df_obj.ix[0:2, 0])

运行结果:

b 1 c 2 dtype: int64 b 1 c 2 dtype: int64 0 -0.241678 1 -0.526918 2 -1.074163 Name: a, dtype: float64

注意

DataFrame索引操作,可将其看作ndarray的索引操作

标签的切片索引是包含末尾位置的

 

参考资料

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3